package hos.file;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;

import java.util.ArrayList;
import java.util.List;

import hos.file.media.FileType;
import hos.file.media.MediaUri;
import hos.file.provider.FileProviderX;
import hos.file.utils.FileUtils;
import hos.file.utils.WpsParams;
import hos.intent.IntentCollection;

/**
 * <p>Title: FileIntent </p>
 * <p>Description:  </p>
 * <p>Company: www.mapuni.com </p>
 *
 * @author : 蔡俊峰
 * @version : 1.0
 * @date : 2024-03-13 20:39
 */
public class FileCollection {

    //<editor-fold desc="OpenFile">


    public static Intent getFile(Context context, String pkgName, String filePath) {
        final Uri uri = FileProviderX.file2Uri(context, filePath);
        /* 依扩展名的类型决定MimeType */
        String type = FileType.getFileType(filePath).getType();
        return IntentCollection.getFileIntent(context, pkgName, uri, type);
    }


    public static Intent getFile(Context context, String filePath) {
        final Uri uri = FileProviderX.file2Uri(context, filePath);
        /* 依扩展名的类型决定MimeType */
        String type = FileType.getFileType(filePath).getType();
        return IntentCollection.getFileIntent(uri, type);
    }
    //</editor-fold>

    //<editor-fold desc="OpenWps">

    public static Intent getWps(Context context, String filePath) {

        Bundle bundle = new Bundle();
        //打开模式
        bundle.putString(WpsParams.OPEN_MODE, WpsParams.OpenMode.NORMAL); // 打开模式
        bundle.putBoolean(WpsParams.SEND_SAVE_BROAD, true);
        //关闭时是否发送广播
        bundle.putString(WpsParams.THIRD_PACKAGE, context.getPackageName());
        bundle.putBoolean(WpsParams.SEND_CLOSE_BROAD, true); // 关闭时是否发送广播
        //第三方应用的包名，用于对改应用合法性的验证
        bundle.putBoolean(WpsParams.CLEAR_TRACE, true);
        //清除打开记录
        //bundle.putBoolean(CLEAR_FILE, true);
        //关闭后删除打开文件
        Intent intent = getWpsIntent(context);
        // bundle.putBoolean(CLEAR_FILE, true); //关闭后删除打开文件
        intent.putExtras(bundle);
        return getFile(context, filePath);
    }


    private static Intent getWpsIntent(Context context) {
        String pkgName = WpsParams.PackageName.NORMAL;
        Intent intent = IntentCollection.getLaunchAppIntent(context, pkgName);
        if (intent == null) {
            String launcherActivity = IntentCollection.getLauncherActivity(context, pkgName);
            intent = IntentCollection.getIntent(Intent.ACTION_VIEW);
            intent.setClassName(pkgName, launcherActivity);
            intent.addCategory(Intent.CATEGORY_LAUNCHER);
        }
        // android11以后强制分区存储，外部资源无法访问，所以添加一个输出保存位置，然后取值操作G
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        }
        intent.setAction(Intent.ACTION_VIEW);
        intent.setClassName(WpsParams.PackageName.NORMAL, WpsParams.ClassName.NORMAL);
        return intent;
    }
    //</editor-fold>

    //<editor-fold desc="Content">

    /**
     * 单选
     *
     * @param type 文件的类型
     */

    public static Intent getContentIntent(FileType.Type type) {
        return IntentCollection.getContentIntent(type.getType());
    }

    /**
     * 多选
     */
    public static Intent getContentListIntent(FileType.Type type) {
        return IntentCollection.getContentListIntent(type.getType());
    }

    //</editor-fold>

    //<editor-fold desc="Document">

    /**
     * 单选
     *
     * @param type 文件的类型
     */
    public static Intent getDocumentIntent(FileType.Type... type) {
        return IntentCollection.getDocumentIntent(FileType.getFileTypeReal(type));
    }


    /**
     * 多选
     */
    public static Intent getDocumentListIntent(FileType.Type... type) {
        return IntentCollection.getDocumentListIntent(FileType.getFileTypeReal(type));
    }

    //</editor-fold>

    //<editor-fold desc="Share">


    /**
     * 分享图片
     *
     * @param filePath 图片地址
     */
    public static Intent getShareTextImageIntent(Context context, final String filePath) {
        Uri imageUri = FileProviderX.file2Uri(context, filePath);
        return IntentCollection.getShareTextImageIntent("", imageUri);
    }

    /**
     * 分享文字和图片
     *
     * @param content  内容
     * @param filePath 图片地址
     */
    public static Intent getShareTextImageIntent(Context context, final String content, final String filePath) {
        Uri imageUri = FileProviderX.file2Uri(context, filePath);
        return IntentCollection.getShareTextImageIntent(content, imageUri);
    }

    /**
     * 分享文字和图片
     *
     * @param content      内容
     * @param filePathList 图片地址列表
     */
    public static Intent getShareTextImageIntent(Context context, final String content, final List<String> filePathList) {
        ArrayList<Uri> imageUriList = new ArrayList<>();
        if (filePathList != null) {
            for (String path : filePathList) {
                if (FileUtils.isFileExists(context, path)) {
                    Uri imageUri = FileProviderX.file2Uri(context, path);
                    imageUriList.add(imageUri);
                }
            }
        }
        return IntentCollection.getShareTextImageIntent(content, imageUriList);
    }
    //</editor-fold>

    //<editor-fold desc="Install">

    /**
     * 获取安装APK的意图
     *
     * @param filePath 安装APK的URI
     */
    public static Intent getInstallAppIntent(Context context, final String filePath) {
        Uri uri = FileProviderX.file2Uri(context, filePath);
        return IntentCollection.getInstallAppIntent(uri);
    }

    //</editor-fold>


    //<editor-fold desc="Media">

    /**
     * 拍照意图
     *
     * @param fileName 文件名称
     */
    public static Intent getImageMedia(Context context, String fileName) {
        Uri uri = MediaUri.createImageUri(context, fileName);
        return IntentCollection.getImageMedia(uri);
    }

    /**
     * 录像意图
     *
     * @param fileName 文件名称
     */
    public static Intent getVideoMedia(Context context, String fileName) {
        Uri uri = MediaUri.createVideoUri(context, fileName);
        return IntentCollection.getVideoMedia(uri);
    }

    /**
     * 录音意图
     *
     * @param fileName 文件名称
     */
    public static Intent getAudioMedia(Context context, String fileName) {
        Uri uri = MediaUri.createVideoUri(context, fileName);
        return IntentCollection.getAudioMedia(uri);
    }

    /**
     * 相册意图
     */
    public static Intent getPickMedia(FileType.Type type) {
        return IntentCollection.getPickMedia(type.getType());
    }

    /**
     * 裁剪意图
     */
    public static Intent getCrop(Context context, String inputPath, String outputPath) {
        return getCrop(context, inputPath, outputPath, 1, 1, 150, 150);
    }

    /**
     * 裁剪意图
     */
    public static Intent getCrop(Context context, String inputPath, String outputPath, int outputX, int outputY) {
        return getCrop(context, inputPath, outputPath, 1, 1, outputX, outputY);
    }

    /**
     * 裁剪意图
     */
    public static Intent getCrop(Context context, String inputPath, String outputPath,
                                 int aspectX, int aspectY,
                                 int outputX, int outputY) {
        Uri inputUri = FileProviderX.file2Uri(context, inputPath);
        Uri outputUri = FileProviderX.file2Uri(context, outputPath);
        return IntentCollection.getCrop(inputUri, outputUri, aspectX, aspectY
                , outputX, outputY);
    }
    //</editor-fold>
}
